package utils

import (
	"context"

	"gin-gateway/core/init"
	"github.com/gin-gonic/gin"
)

// 对自定义 log 的封装，自动加上了 trace 相关字段

// 通用的 warn 日志
func ContextWarning(c context.Context, dltag string, m map[string]interface{}) {
	traceContext := GetTraceContext(c)
	Init.Log.TagWarn(traceContext, dltag, m)
}

// 通用的 error 日志
func ContextError(c context.Context, dltag string, m map[string]interface{}) {
	traceContext := GetTraceContext(c)
	Init.Log.TagError(traceContext, dltag, m)
}

// 通用的 info 日志
func ContextNotice(c context.Context, dltag string, m map[string]interface{}) {
	traceContext := GetTraceContext(c)
	Init.Log.TagInfo(traceContext, dltag, m)
}

// 结合 gin 使用的 error 日志
func ComLogWarning(c *gin.Context, dltag string, m map[string]interface{}) {
	traceContext := Init.TraceFromGinContext(c)
	Init.Log.TagError(traceContext, dltag, m)
}

// 结合 gin 使用的 info 日志
func ComLogNotice(c *gin.Context, dltag string, m map[string]interface{}) {
	traceContext := Init.TraceFromGinContext(c)
	Init.Log.TagInfo(traceContext, dltag, m)
}

// 从 Context 中获取 trace 数据
func GetTraceContext(c context.Context) *Init.TraceContext {
	if c == nil {
		return Init.NewTrace()
	}
	traceContext := c.Value("trace")
	if tc, ok := traceContext.(*Init.TraceContext); ok {
		return tc
	}
	return Init.NewTrace()
}
